package com.xiangxg.jvm.gc;
/*
    当一个对象经过多轮垃圾回收仍然没有被回收掉，长期存活对象进入老年代，不然会造成survior空间浪费
    promote 晋升至老年代，Minor Gc不会回收老年代，使得新生代空间得到有效利用

    -XX:PrintCommandLineFlags 打印命令行的标识，JVM自带的或者设置的参数

    -XX:maxTenuringThreshold 在可以自动调节对象晋升（Promote）到老年代阈值的GC、
    中，设置该阈值的最大值。设置晋升到老年代的对象最大的存活年龄。CMS中默认值为6，G1中默认为15，该数值是由4个bit来表示，所以最大值1111，即15

    -XX:+PrintTenuringDistribution 新生代经历了多次GC后，存活的对象会在From Survivor与To Survivor中来回存放，而这里的一个前提则是这两个空间
    有足够的大小来存放这些数据，在GC算法中，会计算每个对象年龄的大小，如果达到某个年龄后总发现总大小已经大于了Survior空间的50%，
    那么这个时候就要调整阈值，不能再继续等到默认的15次GC后才完成晋升，因为这样会导致Survivor空间不足，所以需要调整阈值，让这些
    存活对象尽快完成晋升

-verbose:gc -Xms20m -Xmx20m -Xmn10m -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -XX:MaxTenuringThreshold=5 -XX:+PrintTenuringDistribution -XX:SurvivorRatio=8

 */
public class MyTest3 {
    public static void main(String[] args) {
        int size = 1024 *1024;//1M
        byte[] myAlloc1 = new byte[2 *size];//2M
        byte[] myAlloc2 = new byte[2 *size];//2M
        byte[] myAlloc3 = new byte[2 *size];//2M
        byte[] myAlloc4 = new byte[2 *size];//2M

        System.out.println("hello world");
    }
}
